import requests
import asyncio
from util import async_timed

'''
运行阻塞API requests 阻塞了asyncio仅有的一个线程 因此requests库会阻止事件循环并行执行任何擦欧总
通常使用的大多数API都是阻塞的无法与asyncio一起使用你 你需要使用支持协程并利用非阻塞套接字的库
如果你使用的库不返回协程并且你没有在自己的协程中使用await 那么你可能进行阻塞调用
'''
@async_timed()
async def get_status() -> int:
    loop = asyncio.get_running_loop()
    loop.slow_callback_duration = .250
    return requests.get("https://www.baidu.com").status_code

@async_timed()
async def main():
    task1 = asyncio.create_task(get_status())
    task2 = asyncio.create_task(get_status())
    task3 = asyncio.create_task(get_status())
    await task1
    await task2
    await task3

asyncio.run(main(), debug=True) # debug模式开启如果协程或任务运行时间超过100毫秒（可以通过slow_callback_duration重新设置此阈值） 就会有日志输出。如果忘记使用await等待协程就会抛出异常